package com.example.mapper;

import com.example.entity.WorkScheduleDate;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * 日期排班Mapper
 */
@Mapper
public interface WorkScheduleDateMapper {
    
    /**
     * 插入日期排班记录
     */
    int insert(WorkScheduleDate workScheduleDate);
    
    /**
     * 根据ID更新日期排班记录
     */
    int updateById(WorkScheduleDate workScheduleDate);
    
    /**
     * 根据ID删除日期排班记录（逻辑删除）
     */
    int deleteById(Long id);
    
    /**
     * 根据ID查询日期排班记录
     */
    WorkScheduleDate selectById(Long id);
    
    /**
     * 根据店长ID查询日期排班列表
     */
    List<WorkScheduleDate> selectByStoreManagerId(@Param("storeManagerId") Long storeManagerId);
    
    /**
     * 根据店长ID和日期查询日期排班列表
     */
    List<WorkScheduleDate> selectByStoreManagerIdAndDate(@Param("storeManagerId") Long storeManagerId, 
                                                         @Param("scheduleDate") LocalDate scheduleDate);
    
    /**
     * 根据店长ID和日期范围查询日期排班列表
     */
    List<WorkScheduleDate> selectByStoreManagerIdAndDateRange(@Param("storeManagerId") Long storeManagerId,
                                                              @Param("startDate") LocalDate startDate,
                                                              @Param("endDate") LocalDate endDate);
    
    /**
     * 检查日期时间段是否冲突
     */
    int checkDateTimeConflict(@Param("storeManagerId") Long storeManagerId, 
                             @Param("scheduleDate") LocalDate scheduleDate,
                             @Param("startHour") Integer startHour, 
                             @Param("endHour") Integer endHour,
                             @Param("excludeId") Long excludeId);
    
    /**
     * 根据店长ID、日期和时间查询日期排班
     */
    WorkScheduleDate selectByStoreManagerIdAndDateTime(@Param("storeManagerId") Long storeManagerId,
                                                       @Param("scheduleDate") LocalDate scheduleDate,
                                                       @Param("hour") Integer hour);
    
    /**
     * 查询所有启用的日期排班记录
     */
    List<WorkScheduleDate> selectAllActiveDateSchedules();
    
    /**
     * 根据店长ID列表查询日期排班记录
     */
    List<WorkScheduleDate> selectByStoreManagerIds(@Param("storeManagerIds") List<Long> storeManagerIds);
} 